<?php
/* 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 * Proporciona metodos para generar claves aleatoreas
 *
 * @author jmj
 */
class Token {
    /**
     * retorna $nCaracteres de tipo numerico
     * @param  Integer $nCaracter
     * @return String
     */
    public function generateNumber($nCaracter){
        $this->checkNCaracter($nCaracter);
        $clave = "";
        for($i=0; $i<$nCaracter; $i++){
            $num = mt_rand(0,9);
            $clave .= $num;
        }
        return $clave;
    }
/**
 * retorna $nCaracteres de tipo alfabetico
 * @param Integer $nCaracter
 * @return String
 */
    public function generateAlfa($nCaracter){
        
        $semilla ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        return $this->generateToken($semilla, $nCaracter);

    }

    /**
     * retorna $nCaracteres de tipo alfanumerico
     * @param Integer $nCaracter
     * @return String
     */
    public function generateAlfaNumeric($nCaracter){
        $semilla ="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return $this->generateToken($semilla, $nCaracter);

    }
/**
 *
 * @param String caracteres que podria contener el token
 * @param Integer numero de caracteres del token
 * @return String
 */
    protected function generateToken($semilla,$nCaracter){
        $this->checkNCaracter($nCaracter);
        $chars = str_split($semilla);
        $clave ="";
        for($i=0; $i<$nCaracter; $i++){
            $rand = mt_rand(0,count($chars)-1);
            $clave.= $chars[$rand];
        }
        return $clave;
    }
/**
 * evalua que el parametro $nCaracter sea de tipo numerico
 * en caso contrario lanza una excepcion
 * @param Integer $nCaracter
 *
 */
    protected function checkNCaracter(& $nCaracter){
        if(!is_numeric($nCaracter))throw new Exception("El parametro pasado al metodo debe ser un numero");
        $nCaracter = ceil($nCaracter);
    }

}
?>
